プログラミングコンテストチャレンジブック 第2版
著 秋葉拓哉 , 岩田 陽一 (@wata), 北川 宜稔(@kita_sama) 2012
PDFあり
CHAPTER 1 いざチャレンジ! でもその前に--準備編
1-1 プログラミングコンテストって何?
1-2 どんなコンテストがあるの?
世界規模のコンテスト--Google Code Jam(GCJ)
上位ランクを目指せ!--TopCoder
最も歴史のあるコンテスト--ACM/ICPC
中学・高校生向けの情報オリンピック--JOI/IOI
Web上で自動採点--オンラインジャッジ
1-3 この本での進め方
1-4 どうやって解答を提出するの?
POJへの提出の仕方
GCJへの提出の仕方
1-5 効率的なアルゴリズムを目指すには
計算量って何だろう
実行時間について
1-6 気楽にウォーミングアップ
まずは簡単な問題から
POJの問題「Ants」
ハードルが上がった「くじびき」
CHAPTER 2 基礎からスタート!--初級編
2-1 すべての基本“全探索”
再帰関数
スタック
キュー
深さ優先探索
幅優先探索
特殊な状態の列挙
枝刈り
硬貨の問題
区間の問題
辞書順最小の問題
その他の例題
2-3 値を覚えて再利用“動的計画法”
探索のメモ化と動的計画法
漸化式を工夫する
計算問題に対するDP
2-4 データを工夫して記憶する“データ構造”
2-5 あれもこれも実は“グラフ”
グラフとは
グラフの表現
グラフの探索
応用問題
2-6 数学的な問題を解くコツ
素数に関する基本的なアルゴリズム
余りの計算
2-7 GCJの問題に挑戦してみよう(1)
Minimum Scalar Product
Crazy Rows
Bribe the Prisoners
Millionaire
練習問題
CHAPTER 3 ここで差がつく!--中級編
3-1 値の検索だけじゃない!“二分探索”
ソート列から値を探す
解を仮定し可能か判定
最小値の最大化
平均最大化
3-2 厳選! 頻出テクニック(1)
3-3 さまざまなデータ構造を操ろう
Binary Indexed Tree
ビットDP
行列累乗
データ構造を用いて高速化
3-5 水を流して問題を解く“ネットワークフロー”
最小カット
二部マッチング
一般マッチング
応用問題
3-6 平面・空間を扱う“計算幾何”
幾何の基本
ギリギリを考えよ
数値積分
3-7 GCJの問題に挑戦してみよう(2)
Numbers
No Cheating
Stock Charts
Watering Plants
Number Sets
Wi-fi Towers
練習問題
CHAPTER 4 さらに極める!--上級編
4-1 より複雑な数学的問題
行列
modの世界
数え上げ
対称性のある数え上げ
4-2 ゲームの必勝法を編み出せ!
ゲームと必勝法
4-3 グラフマスターへの道
4-4 厳選! 頻出テクニック(2)
スタックの利用
4-5 工夫を凝らして賢く探索
枝狩り
列の分割統治法
ツリーの分割統治法
平面の分割統治法
4-7 文字列を華麗に扱う
文字列検索
接尾辞配列
4-8 GCJの問題に挑戦してみよう(3)
Mine Layer
Year of More Code Jam
Football Team
Endless Knight
The Year of Code Jam
練習問題
本書で扱わなかった発展的トピック
本書に掲載した問題リスト